package com.bawei.solr;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.params.MoreLikeThisParams;
import org.apache.solr.common.util.NamedList;

/**
 * 相似性搜索
 * 模糊查询代码演示
 *D:\apache-tomcat-7.0.68_solr\bin
 */

public class MoreLikeThisTest {

	public static void main(String[] args) throws SolrServerException {
		String solrUrl = "http://localhost:28080/solr/mycore2";

		HttpSolrClient client = new HttpSolrClient(solrUrl);

		SolrQuery q = new SolrQuery();// 建立一个新的查询
		q.setQuery("title:我是");
		q.set(MoreLikeThisParams.MLT, true);
		q.set(MoreLikeThisParams.MIN_DOC_FREQ, 1); // 即这个词在多少个文档中出现。
		q.set(MoreLikeThisParams.MIN_TERM_FREQ, 1); // tf(t in d)
													// 关联词出现的频率，词频率是指搜索词t 在文档d
													// 中出现的次数。文档中搜索词出现次数越多总评分也就越高。
		q.set(MoreLikeThisParams.SIMILARITY_FIELDS, "title"); // 用来计算相似性的字段

		q.set(MoreLikeThisParams.DOC_COUNT, 10); // 返回多少相似document

		System.out.println(q.toString());

		QueryResponse res = client.query(q);

		SolrDocumentList results = res.getResults();

		NamedList<?> ndl = (NamedList<?>) res.getResponse().get("moreLikeThis");
		
		
		for (int i = 0; i < ndl.size(); i++) {
			System.out.println("与" + results.get(i) + "相似的doc有：" + ndl.getVal(i));
		}
	}
}
